package warm100;

public class moveZeroes_283 {
    public void moveZeroes(int[] nums) {
        //想法是遍历每个位置前边0的个数
        //就知道每个位置数字最终往前移动多少位
        int cnt = 0, len = nums.length;
        int[] mount = new int[len];
        for (int i = 0; i < len; i++) {
            if (nums[i] != 0)
                mount[i] = cnt;
            else
                cnt++;
        }
        for (int i = 0; i < len; i++)
            if (nums[i] != 0)
                nums[i - mount[i]] = nums[i];
        for (int i = len - cnt; i < len; i++)
            nums[i] = 0;
        return;
    }


    /**
     * 快慢指针写法，一个寻找后边的数字，一个遍历数字与前面的0交换位置
     * @param nums
     */
    public void moveZeroes1(int[] nums) {
        if (nums == null) {
            return;
        }
        //两个指针 i 和 j
        int j = 0;   //j 指向前面的0
        for (int i = 0; i < nums.length; i++) {
            //当前元素!=0，就把其交换到左边，等于0的交换到右边
            if (nums[i] != 0) {
                int tmp = nums[i];
                nums[i] = nums[j];
                nums[j++] = tmp;
            }
        }
    }
}
